package br.com.werp.regras.algoritimo;

import br.com.werp.regras.algoritimo.controle.ControleHistorico;
import br.com.werp.regras.algoritimo.controle.ControleIdVirtual;
import br.com.werp.regras.geral.Algoritimo;
import br.com.werp.regras.geral.ErroPadrao;
import br.com.werp.regras.geral.GerenciadorErros;
import br.com.werp.regras.geral.interfaces.algoritimo.Historico;
import br.com.werp.regras.geral.interfaces.algoritimo.IdVirtual;

import java.sql.Timestamp;

import java.util.List;


/**
 * @author Sobreira
 * Criado em 02/08/2005
 */
public class AlgoritimoImpl implements Algoritimo {
    private static AlgoritimoImpl algoritimoImpl;
    private ControleIdVirtual controleIdVirtual = new ControleIdVirtual();
    private ControleHistorico controleHistorico = new ControleHistorico();

    private AlgoritimoImpl() {
    }

    public static AlgoritimoImpl getAlgoritimoImpl() {
        if (algoritimoImpl == null) {
            algoritimoImpl = new AlgoritimoImpl();
        }

        return algoritimoImpl;
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Algoritimo#criarIdVirtual()
     */
    public void criarIdVirtual(List list, IdVirtual idVirtual)
        throws ErroPadrao {
        try {
            controleIdVirtual.criarIdVirtual(list, idVirtual);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Algoritimo#removerIdVirtual(java.util.List, java.lang.String[])
     */
    public void removerIdVirtual(List list, String[] remover)
        throws ErroPadrao {
        try {
            controleIdVirtual.removerIdVirtual(list, remover);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Algoritimo#obterHistoricoData(java.sql.Timestamp, java.util.List)
     */
    public Historico obterHistoricoData(Timestamp dataAtual, List lista)
        throws ErroPadrao {
        try {
            return controleHistorico.obterHistoricoData(dataAtual, lista);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Algoritimo#GerarListaRemoverIdsReais(java.util.List, java.util.List)
     */
    public List gerarListaRemoverIdsReais(List Ids, List IdsBanco) {
        try {
            return controleIdVirtual.gerarListaRemoverIdsReais(Ids, IdsBanco);
        } catch (Exception e) {
            GerenciadorErros.logarErro(e);
        }

        return null;
    }

    public void criarIdVirtualPrim(List list, IdVirtual VO)
        throws ErroPadrao {
        try {
            controleIdVirtual.criarIdVirtualPrim(list, VO);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }
}
